This analysis uses Global Fishign Watch data to examine the amount of fishing effort that occurs within the areas being considered for protection in Southern Argentina (Fig 1). This area is located withing the EEZ west of 65º and extends from 12-200 nm from shore (Figure 1)
All effort in Argentina EEZ
Parsed with column specification:
cols(
year = col_integer(),
mmsi = col_integer(),
on_fishing_list = col_logical(),
on_fishing_list_nn = col_logical(),
flag_country_name = col_character(),
flag_iso3 = col_character(),
known_label = col_character(),
inferred_label_allyears = col_character(),
inferred_sublabel_allyears = col_character(),
length = col_double(),
tonnage = col_double(),
engine_power = col_double(),
days = col_integer(),
hours = col_double(),
fishing_days = col_integer(),
fishing_hours = col_double(),
fishing_kwh = col_double()
)
Between 2014-2016, we observed a total of 784 vessels fishing within Argentina’s EEZ. Of these, 298 are Argentinian flagged vessels, which accounted for 93% of all fishing effort measured in Kilowatt hours (Table 1). The foreign vessels representing the rest of the fishing effort are predominantly from Chile, Uruguay, China, South Korea and Taiwan (Figure 1). The largest Argentinian fleet excerting most of the fishing effort are trawlers, followed by longliners and squid jiggers (Table 3). In terms of the foreign fleets, the most predominant ones are Uruguyan trawlers and Chinese squid jiggers (Table 3).
| 2014 |
516 |
232 |
38512 |
26100 |
1007 |
693 |
| 2015 |
599 |
249 |
43409 |
28139 |
1083 |
720 |
| 2016 |
622 |
261 |
40892 |
30019 |
1011 |
732 |

| trawlers |
208 |
24270 |
618.49 |
| drifting_longlines |
21 |
2737 |
52.55 |
| squid_jigger |
14 |
1478 |
32.13 |
| fixed_gear |
7 |
923 |
14.65 |
| other_fishing |
2 |
280 |
8.90 |
| purse_seines |
3 |
161 |
4.21 |
| Falkland Islands |
trawlers |
15 |
2335 |
126.78 |
| Spain |
trawlers |
21 |
1954 |
48.55 |
| Uruguay |
trawlers |
44 |
2522 |
33.68 |
| Taiwan |
squid_jigger |
31 |
494 |
12.13 |
| China |
squid_jigger |
117 |
1478 |
11.76 |
| South Korea |
trawlers |
8 |
169 |
9.59 |
| Taiwan |
drifting_longlines |
14 |
282 |
8.77 |
| United Kingdom |
trawlers |
1 |
148 |
7.19 |
| Falkland Islands |
drifting_longlines |
1 |
215 |
5.71 |
| Taiwan |
purse_seines |
6 |
117 |
3.19 |
Fishing effort in Argentina’s EEZ is concentrated in the central offshore region between 40 and 50º S (Figure 2). Additionally, relatively little fishing activity is observable south of 55º South. Regarding foreign fleets, Uruguay fishes predominalty in the northern region of the EEZ within the Argentine-Uruguayan Common Fishing Zone (ZCPAU), Chile’s fleet operates in the South West boundary of the EEZ and in the edge on the EEZ in the central region. China’s activity is less concentrated but occurs generally in the central and northern portion of the EEZ (Figure 3)
Reading layer `falklands_eez' from data source `/Users/JuanMayorga/github/Argentina/eez/falklands_eez.shp' using driver `ESRI Shapefile'
Simple feature collection with 1 feature and 14 fields
geometry type: POLYGON
dimension: XY
bbox: xmin: -65.00393 ymin: -56.24547 xmax: -52.31144 ymax: -47.68011
epsg (SRID): 4326
proj4string: +proj=longlat +datum=WGS84 +no_defs
Parsed with column specification:
cols(
lat_bin_center = col_double(),
lon_bin_center = col_double(),
flag_country_name = col_character(),
flag_iso3 = col_character(),
known_label = col_character(),
inferred_label_allyears = col_character(),
inferred_sublabel_allyears = col_character(),
fishing_days = col_integer(),
fishing_hours = col_double(),
fishing_kwh = col_double()
)
128 tiles needed, this may take a while (try a smaller zoom).
Source : https://maps.googleapis.com/maps/api/staticmap?center=-45,-55&zoom=4&size=640x640&scale=2&maptype=satellite
Regions defined for each Polygons
Regions defined for each Polygons
Ignoring unknown parameters: interpolateScale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

Regions defined for each Polygons
Regions defined for each Polygons
Ignoring unknown parameters: interpolateScale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

Fishing effort by Argentina’s trawlers fleet is ubiquitious throughout the EEZ with little effort observed south of 55ºS. Drifting longliners present a similarly spread distribution but are slighlyt more concentrated in the central region of the EEZ. Effort by the purse seine fleet is limited to a small region in the center of the EEZ and the squid jigging fleet operates predomintnaly north of 47ºS (Figure 4). With the exception of the Uruguayan trawlers, fishing effort by foreign fleets shows a more disperse distribution with some hotspots located in the central East and South West edges of the EEZ. (Figure 5.)
Regions defined for each Polygons
Regions defined for each Polygons
Ignoring unknown parameters: interpolateScale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

Regions defined for each Polygons
Regions defined for each Polygons
Ignoring unknown parameters: interpolateScale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

Effort within the considered Drake MPA
Reading layer `drake' from data source `/Users/JuanMayorga/github/Argentina/eez/drake.shp' using driver `ESRI Shapefile'
Simple feature collection with 1 feature and 1 field
geometry type: POLYGON
dimension: XY
bbox: xmin: -67.26667 ymin: -58.4046 xmax: -64.00517 ymax: -54.94609
epsg (SRID): 4326
proj4string: +proj=longlat +datum=WGS84 +no_defs
Reading layer `south_section_eez' from data source `/Users/JuanMayorga/github/Argentina/eez/south_section_eez.shp' using driver `ESRI Shapefile'
Simple feature collection with 1 feature and 14 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -68.64218 ymin: -58.4046 xmax: -61.00579 ymax: -54.39979
epsg (SRID): 4326
proj4string: +proj=longlat +datum=WGS84 +no_defs
Parsed with column specification:
cols(
year = col_integer(),
timestamp = col_datetime(format = ""),
lat = col_double(),
lon = col_double(),
mmsi = col_integer(),
flag_country_name = col_character(),
flag_iso3 = col_character(),
known_label = col_character(),
inferred_label_allyears = col_character(),
inferred_sublabel_allyears = col_character(),
b_engine_power = col_double(),
nnet_score = col_integer(),
hours = col_double()
)
Within the considered Drake Marine Protected Area, we are able to observe 12 vessels fishing between 2014-2016. Of these, 5 Argentinian vessels (4 trawlers and 1 longliner) account for 99.0112056 of all observed effort (Table 4). Two Chilean vessels and one Korean vessel account for less than 1% of the effort and collectively spent only 7 fishing days in 2016 (Table 4).
| 2014 |
9 |
5 |
91 |
80 |
1.52 |
1.49 |
| 2015 |
7 |
5 |
230 |
226 |
4.02 |
4.01 |
| 2016 |
8 |
5 |
153 |
146 |
1.93 |
1.90 |
| Argentina |
trawlers |
4 |
115 |
1553.63 |
| Argentina |
drifting_longlines |
1 |
31 |
348.71 |
| Chile |
trawlers |
1 |
2 |
12.22 |
| South Korea |
drifting_longlines |
1 |
3 |
8.00 |
| Chile |
drifting_longlines |
1 |
2 |
5.99 |
These results suggest that a very small fraction of Argentina’s fleet operates in the area considered for protection. Specifically, only 1.9138756 % of all Argentinian trawlers and 4.7619048 % of longliners fish in the region. The effort by these vessels represents only 0.2511952 % and 0.6635399 % of all effort by Argentian trawlers and longliners, respectively.
Joining, by = c("year", "inferred_label_allyears")
| 2014 |
drifting_longlines |
12 |
1 |
8.33 |
31.06 |
0.31 |
1.00 |
| 2014 |
trawlers |
195 |
5 |
2.56 |
626.28 |
1.18 |
0.19 |
| 2015 |
drifting_longlines |
14 |
1 |
7.14 |
40.56 |
1.11 |
2.74 |
| 2015 |
trawlers |
204 |
4 |
1.96 |
628.05 |
2.90 |
0.46 |
| 2016 |
drifting_longlines |
21 |
1 |
4.76 |
52.55 |
0.35 |
0.67 |
| 2016 |
trawlers |
209 |
4 |
1.91 |
618.50 |
1.55 |
0.25 |
Source : https://maps.googleapis.com/maps/api/staticmap?center=-56.6,-64.5&zoom=7&size=640x640&scale=2&maptype=satellite
Regions defined for each Polygons
Ignoring unknown parameters: interpolateScale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

Overlap effor map with all MPAs
Reading layer `AMPs_5_v1' from data source `/Users/JuanMayorga/github/Argentina/AMPS_shapefiles/AMPs_5_v1.shp' using driver `ESRI Shapefile'
Simple feature collection with 14 features and 6 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -67.26759 ymin: -58.99964 xmax: -54.76844 ymax: -38.92475
epsg (SRID): 4326
proj4string: +proj=longlat +datum=WGS84 +no_defs
Regions defined for each Polygons
Regions defined for each Polygons
Ignoring unknown parameters: interpolateRegions defined for each Polygons
Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

LS0tCnRpdGxlOiAiQW5hbHlzaXMgb2YgZmlzaGluZyBlZmZvcnQgaW4gdGhlIHByb3Bvc2VkIHByb3RlY3RlZCBhcmVhcyBpbiBBcmdlbnRpbmEiCm91dHB1dDoKICB3b3JkX2RvY3VtZW50OgogIGh0bWxfbm90ZWJvb2s6CiAgICBmaWdfY2FwdGlvbjogeWVzCi0tLQoKYGBge3IgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIHdhcm5pbmc9RiwgZWNobz1GQUxTRSwgcHJvbXB0PUZBTFNFfQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMoCiAgZWFzeXBhY2thZ2VzOjpsaWJyYXJpZXMoImtuaXRyIiwgInRpZHl2ZXJzZSIsICJiaWdycXVlcnkiLCAibHVicmlkYXRlIiwgImJyb29tIiwibW9kZWxyIiwgIkRCSSIsICJ0cmVsbGlzY29wZWpzIiwgICJjb3dwbG90IiwgImd0YWJsZSIsICJncmlkIiwgImdnc2NpIiwgInN0cmluZ3IiLCAibXJlZ2lvbnMiLCAic2YiLCAiZ3JpZCIsICJncmlkRXh0cmEiLCAiZ2dtYXAiKQopCgprbml0cjo6b3B0c19jaHVuayRzZXQod2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIGNvbW1lbnQgPSBGLGVycm9yID0gRkFMU0UsIGVjaG8gPSBGQUxTRSwgcHJvZ3Jlc3MgPSBGKQoKa25pdHI6OmtuaXRfaG9va3Mkc2V0KGlubGluZSA9IGZ1bmN0aW9uKHgpIHsKICBwcmV0dHlOdW0ocm91bmQoeCwyKSwgYmlnLm1hcmsgPSAiLCIpCn0pCgpCUV9jb25uZWN0aW9uIDwtICBkYkNvbm5lY3QoZGJpX2RyaXZlcigpLCBkYXRhc2V0ID0gIiIsIHByb2plY3QgPSAid29ybGQtZmlzaGluZy04MjciKQoKc291cmNlKCJnZndfdGhlbWVzLlIiKQpgYGAKClRoaXMgYW5hbHlzaXMgdXNlcyBHbG9iYWwgRmlzaGlnbiBXYXRjaCBkYXRhIHRvIGV4YW1pbmUgdGhlIGFtb3VudCBvZiBmaXNoaW5nIGVmZm9ydCB0aGF0IG9jY3VycyB3aXRoaW4gdGhlIGFyZWFzIGJlaW5nIGNvbnNpZGVyZWQgZm9yIHByb3RlY3Rpb24gaW4gU291dGhlcm4gQXJnZW50aW5hIChGaWcgMSkuIFRoaXMgYXJlYSBpcyBsb2NhdGVkIHdpdGhpbmcgdGhlIEVFWiB3ZXN0IG9mIDY1wrogYW5kIGV4dGVuZHMgZnJvbSAxMi0yMDAgbm0gZnJvbSBzaG9yZSAoRmlndXJlIDEpIAoKIVtGaWd1cmUgMS4gQXJlYXMgYmVpbmcgY29uc2lkZXJlZCBmb3IgcHJvdGVjdGlvbl0oY29uc2lkZXJlZF9hcmVhcy5qcGcpCgojIEFsbCBlZmZvcnQgaW4gQXJnZW50aW5hIEVFWgoKYGBge3NxbCBjb25uZWN0aW9uID0gQlFfY29ubmVjdGlvbiwgb3V0cHV0LnZhciA9ICJhbGxfZWZmb3J0X2luX0VFWiIsIGV2YWwgPSBGQUxTRX0KU0VMRUNUCiAgYS55ZWFyIHllYXIsCiAgYS5tbXNpIG1tc2ksCiAgYi5vbl9maXNoaW5nX2xpc3Qgb25fZmlzaGluZ19saXN0LAogIGIub25fZmlzaGluZ19saXN0X25uIG9uX2Zpc2hpbmdfbGlzdF9ubiwKICBiLmZsYWdfY291bnRyeV9uYW1lIGZsYWdfY291bnRyeV9uYW1lLAogIGIuZmxhZ19pc28zIGZsYWdfaXNvMywKICBiLmtub3duX2xhYmVsIGtub3duX2xhYmVsLAogIGIuaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMsCiAgYi5pbmZlcnJlZF9zdWJsYWJlbF9hbGx5ZWFycyBpbmZlcnJlZF9zdWJsYWJlbF9hbGx5ZWFycywKICBiLmxlbmd0aCBsZW5ndGgsCiAgYi50b25uYWdlIHRvbm5hZ2UsCiAgYi5lbmdpbmVfcG93ZXIgZW5naW5lX3Bvd2VyLAogIEVYQUNUX0NPVU5UX0RJU1RJTkNUKERBVEUodGltZXN0YW1wKSkgZGF5cywKICBTVU0oYS5ob3VycykgaG91cnMsCiAgRVhBQ1RfQ09VTlRfRElTVElOQ1QoSUYoYS5ubmV0X3Njb3JlID09IDEsIERBVEUodGltZXN0YW1wKSwgTlVMTCkpIGZpc2hpbmdfZGF5cywKICBTVU0oSUYoYS5ubmV0X3Njb3JlID09IDEsIGEuaG91cnMsIDApKSBmaXNoaW5nX2hvdXJzLAogIFNVTShJRihhLm5uZXRfc2NvcmUgPT0gMSwgYS5ob3VycypiLmVuZ2luZV9wb3dlciwgMCkpIGZpc2hpbmdfa3doCkZST00gKAogIFNFTEVDVAogICAgWUVBUih0aW1lc3RhbXApIHllYXIsCiAgICBtbXNpLAogICAgdGltZXN0YW1wLAogICAgc2VnX2lkLAogICAgbG9uLAogICAgbGF0LAogICAgaG91cnMsCiAgICBubmV0X3Njb3JlLAogICAgZWV6X25hbWUKICBGUk9NCiAgICBbd29ybGQtZmlzaGluZy04Mjc6Z2Z3X3Jlc2VhcmNoLm5uXQogIFdIRVJFCiAgICBfUEFSVElUSU9OVElNRSBCRVRXRUVOIFRJTUVTVEFNUCgnMjAxNC0wMS0wMScpCiAgICBBTkQgVElNRVNUQU1QKCcyMDE2LTEyLTMxJykKICAgIEFORCAoZWV6X25hbWUgPT0gIkFyZ2VudGluYSIgT1IgZWV6X25hbWUgPT0gIkZhbGtsYW5kIElzbGFuZHMiKQogICAgQU5EIHNlZ19pZCBJTiAoU0VMRUNUIHNlZ19pZCBGUk9NIFt3b3JsZC1maXNoaW5nLTgyNzpnZndfcmVzZWFyY2guZ29vZF9zZWdtZW50c10pCiAgICApIGEKSU5ORVIgSk9JTiAoCiAgU0VMRUNUCiAgICBtbXNpLAogICAgeWVhciwKICAgIG9uX2Zpc2hpbmdfbGlzdCwKICAgIG9uX2Zpc2hpbmdfbGlzdF9ubiwKICAgIGNvdW50cnlfbmFtZSBmbGFnX2NvdW50cnlfbmFtZSwKICAgIGlzbzMgZmxhZ19pc28zLAogICAgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMsCiAgICBpbmZlcnJlZF9zdWJsYWJlbF9hbGx5ZWFycywKICAgIGtub3duX2xhYmVsLAogICAgSUYoa25vd25fbGVuZ3RoIElTIE5PVCBOVUxMLCBrbm93bl9sZW5ndGgsIGluZmVycmVkX2xlbmd0aCApIGxlbmd0aCwKICAgIElGKGtub3duX3Rvbm5hZ2UgSVMgTk9UIE5VTEwsIGtub3duX3Rvbm5hZ2UsIGluZmVycmVkX3Rvbm5hZ2UgKSB0b25uYWdlLAogICAgSUYoa25vd25fZW5naW5lX3Bvd2VyIElTIE5PVCBOVUxMLCBrbm93bl9lbmdpbmVfcG93ZXIsIGluZmVycmVkX2VuZ2luZV9wb3dlciApIGVuZ2luZV9wb3dlcgogIEZST00KICAgIFtnZndfcmVzZWFyY2gudmVzc2VsX2luZm9fMjAxNzA3MTddCiAgV0hFUkUKICAgIChvbl9maXNoaW5nX2xpc3Rfbm4KICAgICAgT1Igb25fZmlzaGluZ19saXN0KQogICAgQU5EIG9mZnNldHRpbmcgSVMgTlVMTCliCk9OCiAgYS5tbXNpID0gYi5tbXNpCiAgQU5EIGEueWVhciA9IGIueWVhcgpHUk9VUCBCWQogIHllYXIsCiAgbW1zaSwKICBvbl9maXNoaW5nX2xpc3QsCiAgb25fZmlzaGluZ19saXN0X25uLCAKICBmbGFnX2NvdW50cnlfbmFtZSwKICBmbGFnX2lzbzMsCiAga25vd25fbGFiZWwsCiAgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMsCiAgaW5mZXJyZWRfc3VibGFiZWxfYWxseWVhcnMsCiAgbGVuZ3RoLAogIHRvbm5hZ2UsCiAgZW5naW5lX3Bvd2VyCiAgaGF2aW5nIGZpc2hpbmdfaG91cnMgPiAwCmBgYAoKYGBge3IsIGV2YWwgPSBGQUxTRX0Kd3JpdGVfY3N2KGFsbF9lZmZvcnRfaW5fRUVaLCAic2F2ZWRfZmlsZXMvYWxsX2VmZm9ydF9pbl9FRVouY3N2IikKYGBgCgpgYGB7cn0KYWxsX2VmZm9ydF9pbl9FRVogPC0gcmVhZF9jc3YoInNhdmVkX2ZpbGVzL2FsbF9lZmZvcnRfaW5fRUVaLmNzdiIpCmBgYAoKQmV0d2VlbiAyMDE0LTIwMTYsIHdlIG9ic2VydmVkIGEgdG90YWwgb2YgYHIgbl9kaXN0aW5jdChhbGxfZWZmb3J0X2luX0VFWiRtbXNpKWAgdmVzc2VscyBmaXNoaW5nIHdpdGhpbiBBcmdlbnRpbmEncyBFRVouIE9mIHRoZXNlLCBgciBuX2Rpc3RpbmN0KGZpbHRlcihhbGxfZWZmb3J0X2luX0VFWixmbGFnX2lzbzMgPT0gIkFSRyIpJG1tc2kpYCBhcmUgQXJnZW50aW5pYW4gZmxhZ2dlZCB2ZXNzZWxzLCB3aGljaCBhY2NvdW50ZWQgZm9yIDkzJSBvZiBhbGwgZmlzaGluZyBlZmZvcnQgbWVhc3VyZWQgaW4gS2lsb3dhdHQgaG91cnMgKFRhYmxlIDEpLiBUaGUgZm9yZWlnbiB2ZXNzZWxzIHJlcHJlc2VudGluZyB0aGUgcmVzdCBvZiB0aGUgZmlzaGluZyBlZmZvcnQgYXJlIHByZWRvbWluYW50bHkgZnJvbSBDaGlsZSwgVXJ1Z3VheSwgQ2hpbmEsIFNvdXRoIEtvcmVhIGFuZCBUYWl3YW4gKEZpZ3VyZSAxKS4gVGhlIGxhcmdlc3QgQXJnZW50aW5pYW4gZmxlZXQgZXhjZXJ0aW5nIG1vc3Qgb2YgdGhlIGZpc2hpbmcgZWZmb3J0IGFyZSB0cmF3bGVycywgZm9sbG93ZWQgYnkgbG9uZ2xpbmVycyBhbmQgc3F1aWQgamlnZ2VycyAoVGFibGUgMykuIEluIHRlcm1zIG9mIHRoZSBmb3JlaWduIGZsZWV0cywgdGhlIG1vc3QgcHJlZG9taW5hbnQgb25lcyBhcmUgVXJ1Z3V5YW4gdHJhd2xlcnMgYW5kIENoaW5lc2Ugc3F1aWQgamlnZ2VycyAoVGFibGUgMykuCgpgYGB7ciB9CmFsbF9lZmZvcnRfaW5fRUVaJGZsYWdfY291bnRyeV9uYW1lW2FsbF9lZmZvcnRfaW5fRUVaJGZsYWdfY291bnRyeV9uYW1lID09ICJJbnZhbGlkIE1NU0kiXSA8LSAiVW5rbm93biIKCmFsbF9lZmZvcnRfaW5fRUVaJGluZmVycmVkX2xhYmVsX2FsbHllYXJzW2FsbF9lZmZvcnRfaW5fRUVaJG1tc2kgPT0gNDcwMTQwODEwXSA8LSAidHJhd2xlcnMiCmFsbF9lZmZvcnRfaW5fRUVaJGluZmVycmVkX3N1YmxhYmVsX2FsbHllYXJzW2FsbF9lZmZvcnRfaW5fRUVaJG1tc2kgPT0gNDcwMTQwODEwXSA8LSAidHJhd2xlcnMiCmFsbF9lZmZvcnRfaW5fRUVaJGZsYWdfY291bnRyeV9uYW1lW2FsbF9lZmZvcnRfaW5fRUVaJG1tc2kgPT0gNDcwMTQwODEwXSA8LSAiQXJnZW50aW5hIgphbGxfZWZmb3J0X2luX0VFWiRmbGFnX2lzbzNbYWxsX2VmZm9ydF9pbl9FRVokbW1zaSA9PSA0NzAxNDA4MTBdIDwtICJBUkciCgoKYWxsX2VmZm9ydF9pbl9FRVogJT4lCiAgZmlsdGVyKGZpc2hpbmdfaG91cnMgPiAxKSAlPiUgCiAgZ3JvdXBfYnkoeWVhcikgJT4lIAogIHN1bW1hcmlzZShhbGxfdmVzc2VscyA9IG5fZGlzdGluY3QobW1zaSksCiAgICAgICAgICAgIGFyZ192ZXNzZWxzID0gbl9kaXN0aW5jdChtbXNpW2ZsYWdfaXNvMyA9PSAiQVJHIl0pLAogICAgICAgICAgICBmaXNoaW5nX2RheXNfYWxsID0gc3VtKGZpc2hpbmdfZGF5cyksCiAgICAgICAgICAgIGZpc2hpbmdfZGF5c19hcmcgPSBzdW0oZmlzaGluZ19kYXlzW2ZsYWdfY291bnRyeV9uYW1lID09ICdBcmdlbnRpbmEnXSksCiAgICAgICAgICAgIGZpc2hpbmdfZW5lcmd5ID0gcm91bmQoc3VtKGZpc2hpbmdfa3doLCBuYS5ybSA9IFQpLzEwXjYpLAogICAgICAgICAgICBmaXNoaW5nX2VuZXJneV9hcmcgPSByb3VuZChzdW0oZmlzaGluZ19rd2hbZmxhZ19jb3VudHJ5X25hbWUgPT0gJ0FyZ2VudGluYSddKS8xMF42KSkgJT4lIAogIGthYmxlKGNhcHRpb24gPSAidGFibGUgMS4gRmlzaGluZyB2ZXNzZWxzIGFuZCBGaXNoaW5nIGRheXMgaW4gQXJnZW50aW5hJ3MgRUVaICgyMDE0LTIwMTYpIiwKICAgICAgICBjb2wubmFtZXMgPSBjKCJZZWFyIiwgIlRvdGFsIHZlc3NlbHMiLCAiQXJnZW50aW5pYW4gdmVzc2VscyIsICJUb3RhbCBmaXNoaW5nIGRheXMiLCAiQXJnZW50aW5pYW4gZmlzaGluZyBkYXlzIiwgIkZpc2hpbmcgZW5lcmd5IChtaWxsaW9uIEtXaCkiLCAiQXJnZW50aW5hIGZpc2hpbmcgZW5lcmd5IChtaWxsaW9uIEtXaCkiKSkKYGBgCgoKYGBge3IgZmlnLmNhcCA9ICJGaWd1cmUgMS4gTnVtYmVyIG9mIGZpc2hpbmcgdmVzc3NlbHMgYW5kIHRvdGFsIGZpc2hpbmcgZW5lcmd5IHNwZW50IChtaWxsaW9uIEtXaCkgYnkgZmxhZyBzdGF0ZSBpbiAyMDE2In0KKGJhcl9wbG90X2J5X2NvdW50cnkgPC0gYWxsX2VmZm9ydF9pbl9FRVogJT4lCiAgZmlsdGVyKGZpc2hpbmdfaG91cnMgPiAxICYgeWVhciA9PSAyMDE2KSAlPiUKICBncm91cF9ieShmbGFnX2NvdW50cnlfbmFtZSkgJT4lIAogIHN1bW1hcmlzZSh2ZXNzZWxzID0gbl9kaXN0aW5jdChtbXNpKSwKICAgICAgICAgICAgZmlzaGluZ19lbmVyZ3kgPSBzdW0oZmlzaGluZ19rd2gpLzEwXjYpICU+JSAKICB0b3Bfbig4LHZlc3NlbHMpICU+JQogIGdhdGhlcih2YXJpYWJsZSwgdmFsdWUsIC1mbGFnX2NvdW50cnlfbmFtZSkgJT4lIAogIGdncGxvdChhZXMoeCA9IGZvcmNhdHM6OmZjdF9yZW9yZGVyKGZsYWdfY291bnRyeV9uYW1lLCB2YWx1ZSksIHkgPSB2YWx1ZSwgZmlsbCA9IHZhcmlhYmxlKSkrCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSsKICBndWlkZXMoZmlsbCA9IEZBTFNFKSArCiAgY29vcmRfZmxpcCgpKwogIGxhYnMoeSA9ICJWZXNzZWxzIiwgeCA9ICIiKSsKICBmYWNldF93cmFwKCJ2YXJpYWJsZSIsIHNjYWxlcyA9ICdmcmVlJykpKwogIHNjYWxlX2ZpbGxfbnBnKCkKCnRpZmYoInNhdmVkX3Bsb3RzL2Jhcl9wbG90X2J5X2NvdW50cnkudGlmZiIsIGhlaWdodCA9IDEyLCB3aWR0aCA9IDIwLCB1bml0cyA9ICdjbScsIGNvbXByZXNzaW9uID0gImx6dyIsIHJlcyA9IDMwMCkKICAgIApwcmludChiYXJfcGxvdF9ieV9jb3VudHJ5KQogICAgCmludmlzaWJsZShkZXYub2ZmKCkpCmBgYAoKCmBgYHtyfQphbGxfZWZmb3J0X2luX0VFWiAlPiUKICBmaWx0ZXIoZmlzaGluZ19ob3VycyA+IDEgJiB5ZWFyID09IDIwMTYgJiBmbGFnX2NvdW50cnlfbmFtZSA9PSAiQXJnZW50aW5hIiAmICFpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycyAlaW4lIGMoInJlZWZlciIsImNhcmdvX29yX3RhbmtlciIsICJ0YW5rZXIiLCAiY2FyZ28iKSAmICFpcy5uYShpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycykpICU+JQogIHNlbGVjdCgtZmxhZ19jb3VudHJ5X25hbWUpICU+JSAKICBncm91cF9ieShpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycykgJT4lIAogIHN1bW1hcmlzZSh2ZXNzZWxzID0gbl9kaXN0aW5jdChtbXNpKSwKICAgICAgICAgICAgZmlzaGluZ19kYXlzID0gc3VtKGZpc2hpbmdfZGF5cyksCiAgICAgICAgICAgIGZpc2hpbmdfZW5lcmd5ID0gcm91bmQoc3VtKGZpc2hpbmdfa3doKS8xMF42LCBkaWdpdHMgPSAyKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgdG9wX24oMTAsIGZpc2hpbmdfZW5lcmd5KSAlPiUgCiAgYXJyYW5nZShkZXNjKGZpc2hpbmdfZW5lcmd5KSkgJT4lIAogIGthYmxlKGNhcHRpb24gPSAidGFibGUgMi4gRmlzaGluZyB2ZXNzZWxzIGFuZCBlZmZvcnQgYnkgZ2VhciB0eXBlIGZvciBBcmdlbnRpbmEncyBmbGVldCAoMjAxNikiLAogICAgICAgIGNvbC5uYW1lcyA9IGMoIkdlYXIgdHlwZSIsICJWZXNzZWxzIiwgIkZpc2hpbmcgZGF5cyIsIkZpc2hpbmcgZW5lcmd5IChtaWxsaW9uIEtXaCkiKSkKCmFsbF9lZmZvcnRfaW5fRUVaICU+JQogIGZpbHRlcihmaXNoaW5nX2hvdXJzID4gMSAmIHllYXIgPT0gMjAxNiAmIGZsYWdfY291bnRyeV9uYW1lICE9ICJBcmdlbnRpbmEiICYgIWluZmVycmVkX3N1YmxhYmVsX2FsbHllYXJzICVpbiUgYygicmVlZmVyIiwiY2FyZ29fb3JfdGFua2VyIiwgInRhbmtlciIsICJjYXJnbyIpKSAlPiUKICBncm91cF9ieShmbGFnX2NvdW50cnlfbmFtZSwgaW5mZXJyZWRfc3VibGFiZWxfYWxseWVhcnMpICU+JSAKICBzdW1tYXJpc2UodmVzc2VscyA9IG5fZGlzdGluY3QobW1zaSksCiAgICAgICAgICAgIGZpc2hpbmdfZGF5cyA9IHN1bShmaXNoaW5nX2RheXMpLAogICAgICAgICAgICBmaXNoaW5nX2VuZXJneSA9IHJvdW5kKHN1bShmaXNoaW5nX2t3aCkvMTBeNiwgZGlnaXRzID0gMikpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHRvcF9uKDEwLCBmaXNoaW5nX2VuZXJneSkgJT4lIAogIGFycmFuZ2UoZGVzYyhmaXNoaW5nX2VuZXJneSkpJT4lIAogIGthYmxlKGNhcHRpb24gPSAidGFibGUgMy4gRmlzaGluZyB2ZXNzZWxzIGFuZCBlZmZvcnQgYnkgZ2VhciB0eXBlIGZvciBmb3JlaWduIGZsZWV0ICgyMDE2KSIsCiAgICAgICAgY29sLm5hbWVzID0gYygiRmxhZyBDb3VudHJ5IiwiR2VhciB0eXBlIiwgIlZlc3NlbHMiLCAiRmlzaGluZyBkYXlzIiwiRmlzaGluZyBlbmVyZ3kgKG1pbGxpb24gS1doKSIpKQpgYGAKCkZpc2hpbmcgZWZmb3J0IGluIEFyZ2VudGluYSdzIEVFWiBpcyBjb25jZW50cmF0ZWQgaW4gdGhlIGNlbnRyYWwgb2Zmc2hvcmUgcmVnaW9uIGJldHdlZW4gNDAgYW5kIDUwwrogUyAoRmlndXJlIDIpLiBBZGRpdGlvbmFsbHksIHJlbGF0aXZlbHkgbGl0dGxlIGZpc2hpbmcgYWN0aXZpdHkgaXMgb2JzZXJ2YWJsZSBzb3V0aCBvZiA1NcK6IFNvdXRoLiBSZWdhcmRpbmcgZm9yZWlnbiBmbGVldHMsIFVydWd1YXkgZmlzaGVzIHByZWRvbWluYWx0eSBpbiB0aGUgbm9ydGhlcm4gcmVnaW9uIG9mIHRoZSBFRVogd2l0aGluIHRoZSBBcmdlbnRpbmUtVXJ1Z3VheWFuIENvbW1vbiBGaXNoaW5nIFpvbmUgKFpDUEFVKSwgQ2hpbGUncyBmbGVldCBvcGVyYXRlcyBpbiB0aGUgU291dGggV2VzdCBib3VuZGFyeSBvZiB0aGUgRUVaIGFuZCBpbiB0aGUgZWRnZSBvbiB0aGUgRUVaIGluIHRoZSBjZW50cmFsIHJlZ2lvbi4gQ2hpbmEncyBhY3Rpdml0eSBpcyBsZXNzIGNvbmNlbnRyYXRlZCBidXQgb2NjdXJzIGdlbmVyYWxseSBpbiB0aGUgY2VudHJhbCBhbmQgbm9ydGhlcm4gcG9ydGlvbiBvZiB0aGUgRUVaIChGaWd1cmUgMykKCmBgYHtzcWwsIGNvbm5lY3Rpb24gPSBCUV9jb25uZWN0aW9uLCBvdXRwdXQudmFyID0gImJpbm5lZF9lZXpfZWZmb3J0XzIwMTYiLCBldmFsID0gRn0KU0VMRUNUCiAgRkxPT1IoYS5sYXQqNCkvNCArIC4xMjUgbGF0X2Jpbl9jZW50ZXIsCiAgRkxPT1IoYS5sb24qNCkvNCArIC4xMjUgbG9uX2Jpbl9jZW50ZXIsCiAgYi5mbGFnX2NvdW50cnlfbmFtZSBmbGFnX2NvdW50cnlfbmFtZSwKICBiLmZsYWdfaXNvMyBmbGFnX2lzbzMsCiAgYi5rbm93bl9sYWJlbCBrbm93bl9sYWJlbCwKICBiLmluZmVycmVkX2xhYmVsX2FsbHllYXJzIGluZmVycmVkX2xhYmVsX2FsbHllYXJzLAogIGIuaW5mZXJyZWRfc3VibGFiZWxfYWxseWVhcnMgaW5mZXJyZWRfc3VibGFiZWxfYWxseWVhcnMsCiAgRVhBQ1RfQ09VTlRfRElTVElOQ1QoSUYoYS5ubmV0X3Njb3JlID09IDEsIERBVEUodGltZXN0YW1wKSwgTlVMTCkpIGZpc2hpbmdfZGF5cywKICBTVU0oSUYoYS5ubmV0X3Njb3JlID09IDEsIGEuaG91cnMsIDApKSBmaXNoaW5nX2hvdXJzLAogIFNVTShJRihhLm5uZXRfc2NvcmUgPT0gMSwgYS5ob3VycypiLmVuZ2luZV9wb3dlciwgMCkpIGZpc2hpbmdfa3doCkZST00gKAogIFNFTEVDVAogICAgWUVBUih0aW1lc3RhbXApIHllYXIsCiAgICBtbXNpLAogICAgdGltZXN0YW1wLAogICAgc2VnX2lkLAogICAgbG9uLAogICAgbGF0LAogICAgaG91cnMsCiAgICBubmV0X3Njb3JlLAogICAgZWV6X25hbWUKICBGUk9NCiAgICBbd29ybGQtZmlzaGluZy04Mjc6Z2Z3X3Jlc2VhcmNoLm5uXQogIFdIRVJFCiAgICBfUEFSVElUSU9OVElNRSBCRVRXRUVOIFRJTUVTVEFNUCgnMjAxNi0wMS0wMScpCiAgICBBTkQgVElNRVNUQU1QKCcyMDE2LTEyLTMxJykKICAgIEFORCAoZWV6X25hbWUgPT0gIkFyZ2VudGluYSIgT1IgZWV6X25hbWUgPT0gIkZhbGtsYW5kIElzbGFuZHMiKQogICAgQU5EIHNlZ19pZCBJTiAoU0VMRUNUIHNlZ19pZCBGUk9NIFt3b3JsZC1maXNoaW5nLTgyNzpnZndfcmVzZWFyY2guZ29vZF9zZWdtZW50c10pCiAgICApIGEKSU5ORVIgSk9JTiAoCiAgU0VMRUNUCiAgICBtbXNpLAogICAgeWVhciwKICAgIGNvdW50cnlfbmFtZSBmbGFnX2NvdW50cnlfbmFtZSwKICAgIGlzbzMgZmxhZ19pc28zLAogICAgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMsCiAgICBpbmZlcnJlZF9zdWJsYWJlbF9hbGx5ZWFycywKICAgIGtub3duX2xhYmVsLAogICAgSUYoa25vd25fZW5naW5lX3Bvd2VyIElTIE5PVCBOVUxMLCBrbm93bl9lbmdpbmVfcG93ZXIsIGluZmVycmVkX2VuZ2luZV9wb3dlciApIGVuZ2luZV9wb3dlcgogIEZST00KICAgIFtnZndfcmVzZWFyY2gudmVzc2VsX2luZm9fMjAxNzA3MTddCiAgV0hFUkUKICAgIChvbl9maXNoaW5nX2xpc3Rfbm4KICAgICAgT1Igb25fZmlzaGluZ19saXN0KQogICAgQU5EIG9mZnNldHRpbmcgSVMgTlVMTCliCk9OCiAgYS5tbXNpID0gYi5tbXNpCiAgQU5EIGEueWVhciA9IGIueWVhcgpHUk9VUCBCWQogIGxhdF9iaW5fY2VudGVyLAogIGxvbl9iaW5fY2VudGVyLAogIGZsYWdfY291bnRyeV9uYW1lLAogIGZsYWdfaXNvMywKICBrbm93bl9sYWJlbCwKICBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycywKICBpbmZlcnJlZF9zdWJsYWJlbF9hbGx5ZWFycwpgYGAKCmBgYHtyLCBldmFsID0gRn0Kd3JpdGVfY3N2KGJpbm5lZF9lZXpfZWZmb3J0XzIwMTYsICJzYXZlZF9maWxlcy9iaW5uZWRfZWV6X2VmZm9ydF8yMDE2LmNzdiIpCmBgYAoKYGBge3J9CmFyZ19lZXpfc2YgPC0gc3RfcmVhZCgiZWV6L2FyZ19lZXouc2hwIikKCmFyZ19lZXpfc3AgPC0gYXMoYXJnX2Vlel9zZiwgIlNwYXRpYWwiKQoKYXJnX3NpbXBsZXJfZWV6X3NwIDwtIHJtYXBzaGFwZXI6Om1zX3NpbXBsaWZ5KGFyZ19lZXpfc3AsIGtlZXAgPSAwLjAwMykgIyB0aGlzIGlzIGF3ZXNvbWUhCgphcmdfc2ltcGxlcl9lZXpfc2YgPC0gc3RfYXNfc2YoYXJnX3NpbXBsZXJfZWV6X3NwKQoKZmFsa2xhbmRzX2VleiA8LSBzdF9yZWFkKCJlZXovZmFsa2xhbmRzX2Vlei5zaHAiKQpmYWxrbGFuZHNfZWV6X3NwIDwtIGFzKGZhbGtsYW5kc19lZXosICJTcGF0aWFsIikKCmZhbGtsYW5kc19lZXpfc3AgPC0gcm1hcHNoYXBlcjo6bXNfc2ltcGxpZnkoZmFsa2xhbmRzX2Vlel9zcCwga2VlcCA9IDAuMDAzKSAjIHRoaXMgaXMgYXdlc29tZSEKCmBgYAoKYGBge3IgZmlnLmNhcCA9ICJGaWd1cmUgMi4gRmlzaGluZyBlZmZvcnQgaW4gQXJnZW50aW5hJ3MgRUVaIGluIDIwMTYifQpiaW5uZWRfZWV6X2VmZm9ydF8yMDE2IDwtIHJlYWRfY3N2KCJzYXZlZF9maWxlcy9iaW5uZWRfZWV6X2VmZm9ydF8yMDE2LmNzdiIpCgphcmcgPC0gYyhsZWZ0ID0gLTcwLCBib3R0b20gPSAtNjAsIHJpZ2h0ID0gLTUwLCB0b3AgPSAtMzApCgphcmdfYmFzZW1hcCA8LSBnZXRfc3RhbWVubWFwKGFyZywgem9vbSA9IDcsIG1hcHR5cGUgPSAidGVycmFpbiIpCgphcmdfZ29vZ2xlX21hcCA8LSBnZXRfZ29vZ2xlbWFwKGNlbnRlciA9IGMobG9uID0gLTU1LCBsYXQgPSAtNDUpLCB6b29tID0gNCwgbWFwdHlwZSA9ICJzYXRlbGxpdGUiKQoKKGVmZm9ydF9tYXBfd2l0aF9iYXNlbWFwIDwtIGdnbWFwKGFyZ19iYXNlbWFwKSsKICBnZW9tX3BvbHlnb24oCiAgICBkYXRhID0gYnJvb206OnRpZHkoYXJnX3NpbXBsZXJfZWV6X3NwKSwKICAgIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCksCiAgICBmaWxsID0gJ3RyYW5zcGFyZW50JywKICAgIGNvbG9yID0gJ2JsYWNrJywKICAgIGFscGhhID0gMAogICAgKSsKICAgIGdlb21fcG9seWdvbigKICAgIGRhdGEgPSBicm9vbTo6dGlkeShmYWxrbGFuZHNfZWV6X3NwKSwKICAgIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCksCiAgICBmaWxsID0gJ3RyYW5zcGFyZW50JywKICAgIGNvbG9yID0gJ2JsYWNrJywKICAgIGFscGhhID0gMAogICAgKSsKICBnZW9tX3RpbGUoZGF0YSA9IGJpbm5lZF9lZXpfZWZmb3J0XzIwMTYgJT4lCiAgICAgICAgICAgICAgZ3JvdXBfYnkobG9uX2Jpbl9jZW50ZXIsIGxhdF9iaW5fY2VudGVyKSAlPiUgCiAgICAgICAgICAgICAgc3VtbWFyaXplKGZpc2hpbmdfaG91cnMgPSBzdW0oZmlzaGluZ19rd2gsIG5hLnJtID0gVCkvMTAwMCkgJT4lIAogICAgICAgICAgICAgIGZpbHRlcihmaXNoaW5nX2hvdXJzID49IC45KSwKICAgICAgICAgICAgICBhZXMobG9uX2Jpbl9jZW50ZXIsIGxhdF9iaW5fY2VudGVyLCBmaWxsID0gZmlzaGluZ19ob3VycyksIAogICAgICAgICAgICAgIGludGVycG9sYXRlID0gRiwgCiAgICAgICAgICAgIHNob3cubGVnZW5kID0gVCkgKwogIHZpcmlkaXM6OnNjYWxlX2ZpbGxfdmlyaWRpcyhuYW1lID0gImZpc2hpbmcgZW5lcmd5IFxuICh0aG91c2FuZCBLV2gpIFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMgPSAibG9nIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGMoMSwxMCwxMDAsIDEwMDAsIDEwMDAwLCAxMDAwMDAsIDgwMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNjYWxlczo6Y29tbWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IDEpICsKICBsYWJzKHggPSAiTG9uZ2l0dWRlIiwKICAgICAgIHkgPSAiTGF0aXR1ZGUiKSArCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9jb2xvdXJiYXIodGl0bGUucG9zaXRpb24gPSAidG9wIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLmhqdXN0ID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC50aGVtZSA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDAsIHNpemUgPSA5KSkpKwogIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIGJyZWFrcyA9IGMoLTY1LC02MCwtNTUpKSsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApKSsKICB0aGVtZShwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICdncmV5ODAnLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSwgCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBsb3QubWFyZ2luID0gdW5pdChjKDAuNywgMC43LCAwLjcsIDAuNyksICJjbSIpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9ICBlbGVtZW50X3RleHQobWFyZ2luID0gYygwLDAsNSwwLCAiY20iKSwgc2l6ZSA9IHJlbCguNykpLAogICAgICAgIGxlZ2VuZC5rZXkud2lkdGggPSAgdW5pdCguNSwgImNtIiksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpLAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA5KSkpCgp0aWZmKCJzYXZlZF9wbG90cy9lZmZvcnRfbWFwX3dpdGhfYmFzZW1hcC50aWZmIiwgaGVpZ2h0ID0gMTIsIHdpZHRoID0gMjAsIHVuaXRzID0gJ2NtJywgY29tcHJlc3Npb24gPSAibHp3IiwgcmVzID0gMzAwKQogICAgCnByaW50KGVmZm9ydF9tYXBfd2l0aF9iYXNlbWFwKQogICAgCmludmlzaWJsZShkZXYub2ZmKCkpCmBgYAoKCmBgYHtyIGZpZy5jYXAgPSAgIkZpZ3VyZSAzLiBGaXNoaW5nIGVmZm9ydCBieSB0aGUgdG9wIDMgZm9yZWlnbiBmbGFnIHN0YXRlcyBpbiAyMDE2In0KKGVmZm9ydF9tYXBfYnlfY291bnRyeV93aXRoX2Jhc2VtYXAgPC0gZ2dtYXAoYXJnX2Jhc2VtYXApKwogIGdlb21fcG9seWdvbigKICAgIGRhdGEgPSBicm9vbTo6dGlkeShhcmdfc2ltcGxlcl9lZXpfc3ApLAogICAgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKICAgIGZpbGwgPSAndHJhbnNwYXJlbnQnLAogICAgY29sb3IgPSAnYmxhY2snLAogICAgYWxwaGEgPSAwCiAgICApKwogICBnZW9tX3BvbHlnb24oCiAgICBkYXRhID0gYnJvb206OnRpZHkoZmFsa2xhbmRzX2Vlel9zcCksCiAgICBhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXApLAogICAgZmlsbCA9ICd0cmFuc3BhcmVudCcsCiAgICBjb2xvciA9ICdibGFjaycsCiAgICBhbHBoYSA9IDAKICAgICkrCiAgZ2VvbV90aWxlKGRhdGEgPSBiaW5uZWRfZWV6X2VmZm9ydF8yMDE2ICU+JQogIGZpbHRlcihmbGFnX2NvdW50cnlfbmFtZSAlaW4lIGMoIkFyZ2VudGluYSIsIkNoaWxlIiwgIlVydWd1YXkiLCAiQ2hpbmEiKSkgJT4lIAogIGdyb3VwX2J5KGxvbl9iaW5fY2VudGVyLCBsYXRfYmluX2NlbnRlciwgZmxhZ19jb3VudHJ5X25hbWUpICU+JSAKICBzdW1tYXJpemUoZmlzaGluZ19ob3VycyA9IHN1bShmaXNoaW5nX2t3aCwgbmEucm0gPSBUKS8xMDAwKSAlPiUgCiAgZmlsdGVyKGZpc2hpbmdfaG91cnMgPj0gLjkpLAogIGFlcyhsb25fYmluX2NlbnRlciwgbGF0X2Jpbl9jZW50ZXIsIGZpbGwgPSBmaXNoaW5nX2hvdXJzKSwgCiAgICAgICAgICAgIGludGVycG9sYXRlID0gRiwgCiAgICAgICAgICAgIHNob3cubGVnZW5kID0gVCkgKwogIHZpcmlkaXM6OnNjYWxlX2ZpbGxfdmlyaWRpcyhuYW1lID0gImZpc2hpbmcgZW5lcmd5IFxuICh0aG91c2FuZCBLV2gpIFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMgPSAibG9nIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGMoMSwxMCwxMDAsIDEwMDAsIDEwMDAwLCAxMDAwMDAsIDgwMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNjYWxlczo6Y29tbWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IDEpICsKICBsYWJzKHggPSAiTG9uZ2l0dWRlIiwKICAgICAgIHkgPSAiTGF0aXR1ZGUiKSArCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9jb2xvdXJiYXIodGl0bGUucG9zaXRpb24gPSAidG9wIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLmhqdXN0ID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC50aGVtZSA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDAsIHNpemUgPSA5KSkpKwogIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIGJyZWFrcyA9IGMoLTY1LC02MCwtNTUpKSsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApKSsKICB0aGVtZShwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICdncmV5ODAnLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSwgCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSA2KSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gNiksCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoMC43LCAwLjcsIDAuNywgMC43KSwgImNtIiksCiAgICAgICAgbGVnZW5kLnRpdGxlID0gIGVsZW1lbnRfdGV4dChtYXJnaW4gPSBjKDAsMCw1LDAsICJjbSIpLCBzaXplID0gcmVsKC43KSksCiAgICAgICAgbGVnZW5kLmtleS53aWR0aCA9ICB1bml0KC41LCAiY20iKSkrCiAgZmFjZXRfd3JhcCgiZmxhZ19jb3VudHJ5X25hbWUiLCBucm93ID0gMSkpCgp0aWZmKCJzYXZlZF9wbG90cy9lZmZvcnRfbWFwX2J5X2NvdW50cnlfd2l0aF9iYXNlbWFwLnRpZmYiLCBoZWlnaHQgPSAxMiwgd2lkdGggPSAyMCwgdW5pdHMgPSAnY20nLCBjb21wcmVzc2lvbiA9ICJsenciLCByZXMgPSAzMDApCiAgICAKcHJpbnQoZWZmb3J0X21hcF9ieV9jb3VudHJ5X3dpdGhfYmFzZW1hcCkKICAgIAppbnZpc2libGUoZGV2Lm9mZigpKQpgYGAKCkZpc2hpbmcgZWZmb3J0IGJ5IEFyZ2VudGluYSdzIHRyYXdsZXJzIGZsZWV0IGlzIHViaXF1aXRpb3VzIHRocm91Z2hvdXQgdGhlIEVFWiB3aXRoIGxpdHRsZSBlZmZvcnQgb2JzZXJ2ZWQgc291dGggb2YgNTXCulMuIERyaWZ0aW5nIGxvbmdsaW5lcnMgcHJlc2VudCBhIHNpbWlsYXJseSBzcHJlYWQgZGlzdHJpYnV0aW9uIGJ1dCBhcmUgc2xpZ2hseXQgbW9yZSBjb25jZW50cmF0ZWQgaW4gdGhlIGNlbnRyYWwgcmVnaW9uIG9mIHRoZSBFRVouIEVmZm9ydCBieSB0aGUgcHVyc2Ugc2VpbmUgZmxlZXQgaXMgbGltaXRlZCB0byBhIHNtYWxsIHJlZ2lvbiBpbiB0aGUgY2VudGVyIG9mIHRoZSBFRVogYW5kIHRoZSBzcXVpZCBqaWdnaW5nIGZsZWV0IG9wZXJhdGVzIHByZWRvbWludG5hbHkgbm9ydGggb2YgNDfCulMgIChGaWd1cmUgNCkuIFdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgVXJ1Z3VheWFuIHRyYXdsZXJzLCBmaXNoaW5nIGVmZm9ydCBieSBmb3JlaWduIGZsZWV0cyBzaG93cyBhIG1vcmUgZGlzcGVyc2UgZGlzdHJpYnV0aW9uIHdpdGggc29tZSBob3RzcG90cyBsb2NhdGVkIGluIHRoZSBjZW50cmFsIEVhc3QgYW5kIFNvdXRoIFdlc3QgZWRnZXMgb2YgdGhlIEVFWi4gKEZpZ3VyZSA1LikKCmBgYHtyIGZpZy5jYXAgPSAgIkZpZ3VyZSA0LiBGaXNoaW5nIGVmZm9ydCBvZiB0aGUgQXJnZW50aW5pYW4gZmxlZXQgYnkgZ2VhciB0eXBlIGluIDIwMTYifQooZWZmb3J0X21hcF9ieV9nZWFyX3dpdGhfYmFzZW1hcCA8LSBnZ21hcChhcmdfYmFzZW1hcCkrCiAgZ2VvbV9wb2x5Z29uKAogICAgZGF0YSA9IGJyb29tOjp0aWR5KGFyZ19zaW1wbGVyX2Vlel9zcCksCiAgICBhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXApLAogICAgZmlsbCA9ICd0cmFuc3BhcmVudCcsCiAgICBjb2xvciA9ICdibGFjaycsCiAgICBhbHBoYSA9IDAKICAgICkrCiAgIGdlb21fcG9seWdvbigKICAgIGRhdGEgPSBicm9vbTo6dGlkeShmYWxrbGFuZHNfZWV6X3NwKSwKICAgIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCksCiAgICBmaWxsID0gJ3RyYW5zcGFyZW50JywKICAgIGNvbG9yID0gJ2JsYWNrJywKICAgIGFscGhhID0gMAogICAgKSsKICBnZW9tX3RpbGUoZGF0YSA9IGJpbm5lZF9lZXpfZWZmb3J0XzIwMTYgJT4lCiAgICAgICAgICAgICAgZmlsdGVyKGluZmVycmVkX2xhYmVsX2FsbHllYXJzICVpbiUgYygicHVyc2Vfc2VpbmVzIiwgInRyYXdsZXJzIiwgImRyaWZ0aW5nX2xvbmdsaW5lcyIsICJzcXVpZF9qaWdnZXIiKSAmIGZsYWdfY291bnRyeV9uYW1lID09ICJBcmdlbnRpbmEiKSAlPiUgCiAgICAgICAgICAgICAgbXV0YXRlKGluZmVycmVkX2xhYmVsX2FsbHllYXJzID0gc3RyaW5ncjo6c3RyX3JlcGxhY2UoaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMsICJfIiwgIiAiKSkgJT4lIAogICAgICAgICAgICAgIGdyb3VwX2J5KGxvbl9iaW5fY2VudGVyLCBsYXRfYmluX2NlbnRlciwgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMpICU+JSAKICAgICAgICAgICAgICBzdW1tYXJpemUoZmlzaGluZ19ob3VycyA9IHN1bShmaXNoaW5nX2t3aCwgbmEucm0gPSBUKS8xMDAwKSAlPiUgCiAgICAgICAgICAgICAgZmlsdGVyKGZpc2hpbmdfaG91cnMgPj0gLjkpLAogICAgICAgICAgICBhZXMobG9uX2Jpbl9jZW50ZXIsIGxhdF9iaW5fY2VudGVyLCBmaWxsID0gZmlzaGluZ19ob3VycyksIAogICAgICAgICAgICBpbnRlcnBvbGF0ZSA9IEYsIAogICAgICAgICAgICBzaG93LmxlZ2VuZCA9IFQpICsKICB2aXJpZGlzOjpzY2FsZV9maWxsX3ZpcmlkaXMobmFtZSA9ICJmaXNoaW5nIGVuZXJneSBcbiAodGhvdXNhbmQgS1doKSBcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zID0gImxvZyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDEsMTAsMTAwLCAxMDAwLCAxMDAwMCwgMTAwMDAwLCA4MDAwMDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBzY2FsZXM6OmNvbW1hLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAxKSArCiAgbGFicyh4ID0gIkxvbmdpdHVkZSIsCiAgICAgICB5ID0gIkxhdGl0dWRlIikgKwogIGd1aWRlcyhmaWxsID0gZ3VpZGVfY29sb3VyYmFyKHRpdGxlLnBvc2l0aW9uID0gInRvcCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZS5oanVzdCA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwudGhlbWUgPSBlbGVtZW50X3RleHQoYW5nbGUgPSAwLCBzaXplID0gOSkpKSsKICBzY2FsZV94X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCBicmVha3MgPSBjKC02NSwtNjAsLTU1KSkrCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSkrCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAnZ3JleTgwJywgbGluZXR5cGUgPSAiZGFzaGVkIiksIAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gNiksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDYpLAogICAgICAgIHBsb3QubWFyZ2luID0gdW5pdChjKDAuNywgMC43LCAwLjcsIDAuNyksICJjbSIpLAogICAgICAgIGxlZ2VuZC50aXRsZSA9ICBlbGVtZW50X3RleHQobWFyZ2luID0gYygwLDAsNSwwLCAiY20iKSwgc2l6ZSA9IHJlbCguNykpLAogICAgICAgIGxlZ2VuZC5rZXkud2lkdGggPSAgdW5pdCguNSwgImNtIikpKwogIGZhY2V0X3dyYXAoImluZmVycmVkX2xhYmVsX2FsbHllYXJzIiwgbnJvdyA9IDEpKwogIHRoZW1lKHN0cmlwLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApKSkKCnRpZmYoInNhdmVkX3Bsb3RzL2VmZm9ydF9tYXBfYnlfZ2Vhcl93aXRoX2Jhc2VtYXAudGlmZiIsIGhlaWdodCA9IDEyLCB3aWR0aCA9IDIwLCB1bml0cyA9ICdjbScsIGNvbXByZXNzaW9uID0gImx6dyIsIHJlcyA9IDMwMCkKICAgIApwcmludChlZmZvcnRfbWFwX2J5X2dlYXJfd2l0aF9iYXNlbWFwKQogICAgCmludmlzaWJsZShkZXYub2ZmKCkpCmBgYAoKYGBge3IgZmlnLmNhcCA9ICAiRmlndXJlIDUuIEZvcmVpZ24gZmlzaGluZyBlZmZvcnQgYnkgZ2VhciB0eXBlIGluIDIwMTYifQooZm9yZWlnbl9lZmZvcnRfbWFwX2J5X2dlYXJfd2l0aF9iYXNlbWFwIDwtIGdnbWFwKGFyZ19iYXNlbWFwKSsKICBnZW9tX3BvbHlnb24oCiAgICBkYXRhID0gYnJvb206OnRpZHkoYXJnX3NpbXBsZXJfZWV6X3NwKSwKICAgIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCksCiAgICBmaWxsID0gJ3RyYW5zcGFyZW50JywKICAgIGNvbG9yID0gJ2JsYWNrJywKICAgIGFscGhhID0gMAogICAgKSsKICAgZ2VvbV9wb2x5Z29uKAogICAgZGF0YSA9IGJyb29tOjp0aWR5KGZhbGtsYW5kc19lZXpfc3ApLAogICAgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKICAgIGZpbGwgPSAndHJhbnNwYXJlbnQnLAogICAgY29sb3IgPSAnYmxhY2snLAogICAgYWxwaGEgPSAwCiAgICApKwogIGdlb21fdGlsZShkYXRhID0gYmlubmVkX2Vlel9lZmZvcnRfMjAxNiAlPiUKICAgICAgICAgICAgICBmaWx0ZXIoaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgJWluJSBjKCJwdXJzZV9zZWluZXMiLCAidHJhd2xlcnMiLCAiZHJpZnRpbmdfbG9uZ2xpbmVzIiwgInNxdWlkX2ppZ2dlciIpICYgZmxhZ19jb3VudHJ5X25hbWUgIT0gIkFyZ2VudGluYSIpICU+JSAKICAgICAgICAgICAgICBtdXRhdGUoaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgPSBzdHJpbmdyOjpzdHJfcmVwbGFjZShpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycywgIl8iLCAiICIpKSAlPiUgCiAgICAgICAgICAgICAgZ3JvdXBfYnkobG9uX2Jpbl9jZW50ZXIsIGxhdF9iaW5fY2VudGVyLCBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycykgJT4lIAogICAgICAgICAgICAgIHN1bW1hcml6ZShmaXNoaW5nX2hvdXJzID0gc3VtKGZpc2hpbmdfa3doLCBuYS5ybSA9IFQpLzEwMDApICU+JSAKICAgICAgICAgICAgICBmaWx0ZXIoZmlzaGluZ19ob3VycyA+PSAuOSksCiAgICAgICAgICAgIGFlcyhsb25fYmluX2NlbnRlciwgbGF0X2Jpbl9jZW50ZXIsIGZpbGwgPSBmaXNoaW5nX2hvdXJzKSwgCiAgICAgICAgICAgIGludGVycG9sYXRlID0gRiwgCiAgICAgICAgICAgIHNob3cubGVnZW5kID0gVCkgKwogIHZpcmlkaXM6OnNjYWxlX2ZpbGxfdmlyaWRpcyhuYW1lID0gImZpc2hpbmcgZW5lcmd5IFxuICh0aG91c2FuZCBLV2gpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMgPSAibG9nIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGMoMSwxMCwxMDAsIDEwMDAsIDEwMDAwLCAxMDAwMDAsIDgwMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNjYWxlczo6Y29tbWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IDEpICsKICBsYWJzKHggPSAiTG9uZ2l0dWRlIiwKICAgICAgIHkgPSAiTGF0aXR1ZGUiKSArCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9jb2xvdXJiYXIodGl0bGUucG9zaXRpb24gPSAidG9wIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLmhqdXN0ID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC50aGVtZSA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDAsIHNpemUgPSA5KSkpKwogIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksYnJlYWtzID0gYygtNjUsLTYwLC01NSkpKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCkpKwogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gJ2dyZXk4MCcsIGxpbmV0eXBlID0gImRhc2hlZCIpLCAKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDYpLAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA2KSwKICAgICAgICBwbG90Lm1hcmdpbiA9IHVuaXQoYygwLjcsIDAuNywgMC43LCAwLjcpLCAiY20iKSwKICAgICAgICBsZWdlbmQudGl0bGUgPSAgZWxlbWVudF90ZXh0KG1hcmdpbiA9IGMoMCwwLDUsMCwgImNtIiksIHNpemUgPSByZWwoLjcpKSwKICAgICAgICBsZWdlbmQua2V5LndpZHRoID0gIHVuaXQoLjUsICJjbSIpKSsKICBmYWNldF93cmFwKCJpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycyIsIG5yb3cgPSAxKSsKICB0aGVtZShzdHJpcC50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSkpCgp0aWZmKCJzYXZlZF9wbG90cy9mb3JlaWduX2VmZm9ydF9tYXBfYnlfZ2Vhcl93aXRoX2Jhc2VtYXAudGlmZiIsIGhlaWdodCA9IDEyLCB3aWR0aCA9IDIwLCB1bml0cyA9ICdjbScsIGNvbXByZXNzaW9uID0gImx6dyIsIHJlcyA9IDMwMCkKICAgIApwcmludChmb3JlaWduX2VmZm9ydF9tYXBfYnlfZ2Vhcl93aXRoX2Jhc2VtYXApCiAgICAKaW52aXNpYmxlKGRldi5vZmYoKSkKYGBgCgojIEVmZm9ydCB3aXRoaW4gdGhlIGNvbnNpZGVyZWQgRHJha2UgTVBBCgpgYGB7ciBsb2FkX2RyYWtlX3NocH0KZHJha2Vfc2YgPC0gc3RfcmVhZCgiZWV6L2RyYWtlLnNocCIpCgpkcmFrZV9lZXpfc3AgPC0gYXMoZHJha2Vfc2YsICJTcGF0aWFsIikKCnNvdXRoX2Vlel9zZiA8LSBzdF9yZWFkKCJlZXovc291dGhfc2VjdGlvbl9lZXouc2hwIikKCnNvdXRoX2Vlel9zcCA8LSBhcyhzb3V0aF9lZXpfc2YsICJTcGF0aWFsIikKCnNvdXRoX3NpbXBsZXJfZWV6X3NwIDwtIHJtYXBzaGFwZXI6Om1zX3NpbXBsaWZ5KHNvdXRoX2Vlel9zcCwga2VlcCA9IDAuMDAzKSAjIHRoaXMgaXMgYXdlc29tZSEKCnNvdXRoX3NpbXBsZXJfZWV6X3NmIDwtIHN0X2FzX3NmKHNvdXRoX3NpbXBsZXJfZWV6X3NwKQpgYGAKCmBgYHtzcWwgY29ubmVjdGlvbiA9IEJRX2Nvbm5lY3Rpb24sIG91dHB1dC52YXIgPSAiYWxsX3Bvc2l0aW9uc19pbl9kcmFrZSIsIGV2YWwgPSBGfQpTRUxFQ1QKICBhLnllYXIgeWVhciwKICBhLnRpbWVzdGFtcCB0aW1lc3RhbXAsCiAgYS5sYXQgbGF0LAogIGEubG9uIGxvbiwKICBhLm1tc2kgbW1zaSwKICBiLmZsYWdfY291bnRyeV9uYW1lIGZsYWdfY291bnRyeV9uYW1lLAogIGIuZmxhZ19pc28zIGZsYWdfaXNvMywKICBiLmtub3duX2xhYmVsIGtub3duX2xhYmVsLAogIGIuaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMsCiAgYi5pbmZlcnJlZF9zdWJsYWJlbF9hbGx5ZWFycyBpbmZlcnJlZF9zdWJsYWJlbF9hbGx5ZWFycywKICBiLmVuZ2luZV9wb3dlciwKICBhLm5uZXRfc2NvcmUgbm5ldF9zY29yZSwKICBhLmhvdXJzIGhvdXJzLCAKRlJPTSAoCiAgU0VMRUNUCiAgICBZRUFSKHRpbWVzdGFtcCkgeWVhciwKICAgIG1tc2ksCiAgICB0aW1lc3RhbXAsCiAgICBzZWdfaWQsCiAgICBsb24sCiAgICBsYXQsCiAgICBob3VycywKICAgIG5uZXRfc2NvcmUsCiAgICBlZXpfbmFtZQogIEZST00KICAgIFt3b3JsZC1maXNoaW5nLTgyNzpnZndfcmVzZWFyY2gubm5dCiAgV0hFUkUKICAgIF9QQVJUSVRJT05USU1FIEJFVFdFRU4gVElNRVNUQU1QKCcyMDE0LTAxLTAxJykKICAgIEFORCBUSU1FU1RBTVAoJzIwMTYtMTItMzEnKQogICAgQU5EIHNlZ19pZCBJTiAoU0VMRUNUIHNlZ19pZCBGUk9NIFt3b3JsZC1maXNoaW5nLTgyNzpnZndfcmVzZWFyY2guZ29vZF9zZWdtZW50c10pCiAgICBBTkQgZWV6X25hbWUgPT0gIkFyZ2VudGluYSIgYW5kIGRpc3RhbmNlX2Zyb21fc2hvcmUgPiAxMioxODUyIGFuZCBsb24gPD0gLTY0IGFuZCBsYXQgPCAtIDU1KSBhCklOTkVSIEpPSU4gKAogIFNFTEVDVAogICAgbW1zaSwKICAgIHllYXIsCiAgICBjb3VudHJ5X25hbWUgZmxhZ19jb3VudHJ5X25hbWUsCiAgICBpc28zIGZsYWdfaXNvMywKICAgIGluZmVycmVkX2xhYmVsX2FsbHllYXJzLAogICAgaW5mZXJyZWRfc3VibGFiZWxfYWxseWVhcnMsCiAgICBrbm93bl9sYWJlbCwKICAgIElGKGtub3duX2VuZ2luZV9wb3dlciBJUyBOT1QgTlVMTCwga25vd25fZW5naW5lX3Bvd2VyLCBpbmZlcnJlZF9lbmdpbmVfcG93ZXIgKSBlbmdpbmVfcG93ZXIKICBGUk9NCiAgICBbZ2Z3X3Jlc2VhcmNoLnZlc3NlbF9pbmZvXzIwMTcwNzE3XQogIFdIRVJFCiAgICAob25fZmlzaGluZ19saXN0X25uCiAgICAgIE9SIG9uX2Zpc2hpbmdfbGlzdCkKICAgIEFORCBvZmZzZXR0aW5nIElTIE5VTEwpYgpPTgogIGEubW1zaSA9IGIubW1zaQogIEFORCBhLnllYXIgPSBiLnllYXIKYGBgCgpgYGB7ciBzYXZlX2RyYWtlX3Bvc2l0aW9ucywgZXZhbCA9IEZ9CndyaXRlX2NzdihhbGxfcG9zaXRpb25zX2luX2RyYWtlLCAic2F2ZWRfZmlsZXMvYWxsX3Bvc2l0aW9uc19pbl9kcmFrZS5jc3YiKQpgYGAKCmBgYHtyIGZpbHRlcl9vdXRfMTJubX0KYWxsX3Bvc2l0aW9uc19pbl9kcmFrZSA8LSByZWFkX2Nzdigic2F2ZWRfZmlsZXMvYWxsX3Bvc2l0aW9uc19pbl9kcmFrZS5jc3YiKQoKYWxsX3Bvc2l0aW9uc19pbl9kcmFrZV9zcCA8LSBhbGxfcG9zaXRpb25zX2luX2RyYWtlCgpzcDo6Y29vcmRpbmF0ZXMoYWxsX3Bvc2l0aW9uc19pbl9kcmFrZV9zcCkgPC0gYygibG9uIiwgImxhdCIpCgpzcDo6cHJvajRzdHJpbmcoYWxsX3Bvc2l0aW9uc19pbl9kcmFrZV9zcCkgPC0gc3A6OnByb2o0c3RyaW5nKGRyYWtlX2Vlel9zcCkKCmJleW9uZF8xMl9ubSA8LSBhbGxfcG9zaXRpb25zX2luX2RyYWtlX3NwWyFpcy5uYShzcDo6b3ZlcihhbGxfcG9zaXRpb25zX2luX2RyYWtlX3NwLCBhcyhkcmFrZV9lZXpfc3AsICJTcGF0aWFsUG9seWdvbnMiKSkpLF0KCmFsbF9wb3NpdGlvbnNfaW5fZHJha2VfYmV5b25kXzEybm0gPC0gY2JpbmQoYmV5b25kXzEyX25tQGNvb3JkcywgYmV5b25kXzEyX25tQGRhdGEpCmBgYAoKYGBge3IgZ3JvdXBfYnlfbW1zaX0KZWZmb3J0X2luX2RyYWtlX2JleW9uZF8xMm5tX2J5X21tc2kgPC0gYWxsX3Bvc2l0aW9uc19pbl9kcmFrZV9iZXlvbmRfMTJubSAlPiUgCiAgZ3JvdXBfYnkoeWVhciwgbW1zaSwgZmxhZ19jb3VudHJ5X25hbWUsIGZsYWdfaXNvMywgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMpICU+JSAKICBzdW1tYXJpemUoZGF5cyA9IG5fZGlzdGluY3QoZGF0ZSh0aW1lc3RhbXApKSwKICAgICAgICAgICAgZmlzaGluZ19kYXlzID0gbl9kaXN0aW5jdChkYXRlKHRpbWVzdGFtcFtubmV0X3Njb3JlID09IDEgXSkpLAogICAgICAgICAgICBmaXNoaW5nX2hvdXJzID0gc3VtKGhvdXJzW25uZXRfc2NvcmUgPT0gMV0sIG5hLnJtID0gVCksCiAgICAgICAgICAgIGZpc2hpbmdfa3doID0gc3VtKGhvdXJzKmJfZW5naW5lX3Bvd2VyW25uZXRfc2NvcmUgPT0gMV0sIG5hLnJtID0gVCkpCmBgYAoKV2l0aGluIHRoZSBjb25zaWRlcmVkIERyYWtlIE1hcmluZSBQcm90ZWN0ZWQgQXJlYSwgd2UgYXJlIGFibGUgdG8gb2JzZXJ2ZSBgciBuX2Rpc3RpbmN0KGZpbHRlcihlZmZvcnRfaW5fZHJha2VfYmV5b25kXzEybm1fYnlfbW1zaSwgZmlzaGluZ19ob3VycyA+IDEpJG1tc2kpYCB2ZXNzZWxzIGZpc2hpbmcgYmV0d2VlbiAyMDE0LTIwMTYuIE9mIHRoZXNlLCBgciBuX2Rpc3RpbmN0KGZpbHRlcihlZmZvcnRfaW5fZHJha2VfYmV5b25kXzEybm1fYnlfbW1zaSwgZmlzaGluZ19ob3VycyA+IDEsIGZsYWdfaXNvMyA9PSAiQVJHIikkbW1zaSlgIEFyZ2VudGluaWFuIHZlc3NlbHMgKDQgdHJhd2xlcnMgYW5kIDEgbG9uZ2xpbmVyKSBhY2NvdW50IGZvciBgciAxMDAqc3VtKGZpbHRlcihlZmZvcnRfaW5fZHJha2VfYmV5b25kXzEybm1fYnlfbW1zaSxmbGFnX2lzbzMgPT0gIkFSRyIpJGZpc2hpbmdfa3doKS9zdW0oZmlsdGVyKGVmZm9ydF9pbl9kcmFrZV9iZXlvbmRfMTJubV9ieV9tbXNpKSRmaXNoaW5nX2t3aClgIG9mIGFsbCBvYnNlcnZlZCBlZmZvcnQgKFRhYmxlIDQpLiBUd28gQ2hpbGVhbiB2ZXNzZWxzIGFuZCBvbmUgS29yZWFuIHZlc3NlbCBhY2NvdW50IGZvciBsZXNzIHRoYW4gMSUgb2YgdGhlIGVmZm9ydCBhbmQgY29sbGVjdGl2ZWx5IHNwZW50IG9ubHkgNyBmaXNoaW5nIGRheXMgaW4gMjAxNiAoVGFibGUgNCkuIAoKYGBge3J9CmVmZm9ydF9pbl9kcmFrZV9iZXlvbmRfMTJubV9ieV9tbXNpICU+JSAKICBmaWx0ZXIoZmlzaGluZ19ob3VycyA+IDEpICU+JSAKICBncm91cF9ieSh5ZWFyKSAlPiUgCiAgc3VtbWFyaXNlKGFsbF92ZXNzZWxzID0gbl9kaXN0aW5jdChtbXNpKSwKICAgICAgICAgICAgYXJnX3Zlc3NlbHMgPSBuX2Rpc3RpbmN0KG1tc2lbZmxhZ19pc28zID09ICJBUkciXSksCiAgICAgICAgICAgIGZpc2hpbmdfZGF5c19hbGwgPSBzdW0oZmlzaGluZ19kYXlzKSwKICAgICAgICAgICAgZmlzaGluZ19kYXlzX2FyZyA9IHN1bShmaXNoaW5nX2RheXNbZmxhZ19jb3VudHJ5X25hbWUgPT0gJ0FyZ2VudGluYSddKSwKICAgICAgICAgICAgZmlzaGluZ19lbmVyZ3kgPSByb3VuZChzdW0oZmlzaGluZ19rd2gsIG5hLnJtID0gVCkvMTBeNiwgMiksCiAgICAgICAgICAgIGZpc2hpbmdfZW5lcmd5X2FyZyA9IHJvdW5kKHN1bShmaXNoaW5nX2t3aFtmbGFnX2NvdW50cnlfbmFtZSA9PSAnQXJnZW50aW5hJ10pLzEwXjYsIGRpZ2l0cyA9IDIpKSAlPiUgCiAga2FibGUoY2FwdGlvbiA9ICJ0YWJsZSA0LiBGaXNoaW5nIHZlc3NlbHMgYW5kIEZpc2hpbmcgZGF5cyBpbiB0aGUgY29uc2lkZXJlZCBEcmFrZSBwcm90ZWN0ZWQgYXJlYSAoMjAxNC0yMDE2KSIsCiAgICAgICAgY29sLm5hbWVzID0gYygiWWVhciIsICJUb3RhbCB2ZXNzZWxzIiwgIkFyZ2VudGluaWFuIHZlc3NlbHMiLCAiVG90YWwgZmlzaGluZyBkYXlzIiwgIkFyZ2VudGluaWFuIGZpc2hpbmcgZGF5cyIsICJGaXNoaW5nIGVuZXJneSAobWlsbGlvbiBLV2gpIiwgIkFyZ2VudGluYSBmaXNoaW5nIGVuZXJneSAobWlsbGlvbiBLV2gpIikpCmBgYAoKYGBge3J9CmVmZm9ydF9pbl9kcmFrZV9iZXlvbmRfMTJubV9ieV9tbXNpICU+JQogIGZpbHRlcihmaXNoaW5nX2hvdXJzID4gMSAmIHllYXIgPT0gMjAxNikgJT4lIAogIGdyb3VwX2J5KGZsYWdfY291bnRyeV9uYW1lLCBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycykgJT4lIAogIHN1bW1hcmlzZSh2ZXNzZWxzID0gbl9kaXN0aW5jdChtbXNpKSwKICAgICAgICAgICAgZmlzaGluZ19kYXlzID0gc3VtKGZpc2hpbmdfZGF5cyksCiAgICAgICAgICAgIGZpc2hpbmdfZW5lcmd5ID0gcm91bmQoc3VtKGZpc2hpbmdfa3doKS8xMF4zLCAyKSkgJT4lIAogIGFycmFuZ2UoZGVzYyhmaXNoaW5nX2VuZXJneSkpICU+JSAKICBrYWJsZShjYXB0aW9uID0gInRhYmxlIDUuIEZpc2hpbmcgdmVzc2VscyBhbmQgZWZmb3J0IGJ5IGNvdW50cnkgYW5kIGdlYXIgdHlwZSBpbiB0aGUgY29uc2lkZXJlZCBEcmFrZSBNUEEgKDIwMTYpIiwKICAgICAgICBjb2wubmFtZXMgPSBjKCJGbGFnIHN0YXRlIiwgIkdlYXIgdHlwZSIsICJWZXNzZWxzIiwgIkZpc2hpbmcgZGF5cyIsICAiRmlzaGluZyBlbmVyZ3kgKHRob3VzYW5kIEtXaCkiKSkKYGBgCgpUaGVzZSByZXN1bHRzIHN1Z2dlc3QgdGhhdCBhIHZlcnkgc21hbGwgZnJhY3Rpb24gb2YgQXJnZW50aW5hJ3MgZmxlZXQgb3BlcmF0ZXMgaW4gdGhlIGFyZWEgY29uc2lkZXJlZCBmb3IgcHJvdGVjdGlvbi4gU3BlY2lmaWNhbGx5LCBvbmx5IGByIDEwMCpuX2Rpc3RpbmN0KGZpbHRlcihlZmZvcnRfaW5fZHJha2VfYmV5b25kXzEybm1fYnlfbW1zaSwgZmlzaGluZ19ob3VycyA+IDEsIGZsYWdfaXNvMyA9PSAiQVJHIiwgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgPT0gInRyYXdsZXJzIikkbW1zaSkvbl9kaXN0aW5jdChmaWx0ZXIoYWxsX2VmZm9ydF9pbl9FRVosIGZsYWdfaXNvMyA9PSAiQVJHIiwgeWVhciA9PSAyMDE2LCAgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgPT0gInRyYXdsZXJzIikkbW1zaSlgICUgb2YgYWxsIEFyZ2VudGluaWFuIHRyYXdsZXJzIGFuZCBgciAxMDAqbl9kaXN0aW5jdChmaWx0ZXIoZWZmb3J0X2luX2RyYWtlX2JleW9uZF8xMm5tX2J5X21tc2ksIGZsYWdfaXNvMyA9PSAiQVJHIiwgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgPT0gImRyaWZ0aW5nX2xvbmdsaW5lcyIsIGZpc2hpbmdfaG91cnMgPiAxKSRtbXNpKS9uX2Rpc3RpbmN0KGZpbHRlcihhbGxfZWZmb3J0X2luX0VFWiwgZmxhZ19pc28zID09ICJBUkciLCB5ZWFyID09IDIwMTYsICBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycyA9PSAiZHJpZnRpbmdfbG9uZ2xpbmVzIikkbW1zaSlgICUgb2YgbG9uZ2xpbmVycyBmaXNoIGluIHRoZSByZWdpb24uIFRoZSBlZmZvcnQgYnkgdGhlc2UgdmVzc2VscyByZXByZXNlbnRzIG9ubHkgYHIgMTAwKnN1bShmaWx0ZXIoZWZmb3J0X2luX2RyYWtlX2JleW9uZF8xMm5tX2J5X21tc2ksIGZsYWdfaXNvMyA9PSAiQVJHIiwgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMgPT0gInRyYXdsZXJzIiwgeWVhciA9PSAyMDE2KSRmaXNoaW5nX2t3aCkvc3VtKGZpbHRlcihhbGxfZWZmb3J0X2luX0VFWiwgZmxhZ19pc28zID09ICJBUkciLCB5ZWFyID09IDIwMTYsICBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycyA9PSAidHJhd2xlcnMiKSRmaXNoaW5nX2t3aClgICUgYW5kIGByIDEwMCpzdW0oZmlsdGVyKGVmZm9ydF9pbl9kcmFrZV9iZXlvbmRfMTJubV9ieV9tbXNpLCBmbGFnX2lzbzMgPT0gIkFSRyIsIGluZmVycmVkX2xhYmVsX2FsbHllYXJzID09ICJkcmlmdGluZ19sb25nbGluZXMiLCB5ZWFyID09IDIwMTYpJGZpc2hpbmdfa3doKS9zdW0oZmlsdGVyKGFsbF9lZmZvcnRfaW5fRUVaLCBmbGFnX2lzbzMgPT0gIkFSRyIsIHllYXIgPT0gMjAxNiwgIGluZmVycmVkX2xhYmVsX2FsbHllYXJzID09ICJkcmlmdGluZ19sb25nbGluZXMiKSRmaXNoaW5nX2t3aClgICUgb2YgYWxsIGVmZm9ydCBieSBBcmdlbnRpYW4gdHJhd2xlcnMgYW5kIGxvbmdsaW5lcnMsIHJlc3BlY3RpdmVseS4gCgoKYGBge3J9CmFsbF9lZmZvcnRfaW5fRUVaICU+JSAKICBmaWx0ZXIoZmxhZ19pc28zID09ICJBUkciLCBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycyAlaW4lIGMoInRyYXdsZXJzIiwgImRyaWZ0aW5nX2xvbmdsaW5lcyIpKSAlPiUgCiAgZ3JvdXBfYnkoeWVhciwgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMpICU+JSAKICBzdW1tYXJpc2UodmVzc2VscyA9IG5fZGlzdGluY3QobW1zaSksCiAgICAgICAgICAgIGZpc2hpbmdfZW5lcmd5ID0gcm91bmQoc3VtKGZpc2hpbmdfa3doKS8xMF42LDIpKSAlPiUgCiAgbGVmdF9qb2luKGVmZm9ydF9pbl9kcmFrZV9iZXlvbmRfMTJubV9ieV9tbXNpICU+JSAKICBmaWx0ZXIoZmxhZ19pc28zID09ICJBUkciLCBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycyAlaW4lIGMoInRyYXdsZXJzIiwgImRyaWZ0aW5nX2xvbmdsaW5lcyIpKSAlPiUgCiAgZ3JvdXBfYnkoeWVhciwgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMpICU+JSAKICBzdW1tYXJpc2UodmVzc2Vsc19pbl9kcmFrZSA9IG5fZGlzdGluY3QobW1zaSksCiAgICAgICAgICAgIGZpc2hpbmdfZW5lcmd5X2luX2RyYWtlID0gcm91bmQoc3VtKGZpc2hpbmdfa3doKS8xMF42LDIpKSkgJT4lIAogIG11dGF0ZShwX3Zlc3NlbHMgPSAxMDAqdmVzc2Vsc19pbl9kcmFrZS92ZXNzZWxzLAogICAgICAgICBwX2VuZXJneSA9IDEwMCpmaXNoaW5nX2VuZXJneV9pbl9kcmFrZS9maXNoaW5nX2VuZXJneSkgJT4lIAogIHNlbGVjdCh5ZWFyLCBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycywgdmVzc2VscywgdmVzc2Vsc19pbl9kcmFrZSxwX3Zlc3NlbHMsIGV2ZXJ5dGhpbmcoKSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgMikgJT4lIAogIGthYmxlKGNhcHRpb24gPSAidGFibGUgNi4gRnJhY3Rpb24gb2YgZmxlZXQgYW5kIGZpc2hpbmcgZWZmb3J0ICh0aG91c2FuZCBLV2gpIGJ5IGdlYXIgdHlwZSB3aXRoaW4gdGhlIGNvbnNpZGVyZWQgcHJvdGVjdGVkIGFyZWEgKDIwMTQtMjAxNikiLAogICAgICAgIGNvbC5uYW1lcyA9IGMoIlllYXIiLCAiR2VhciB0eXBlIiwgIkFsbCB2ZXNzZWxzIGluIEVFWiIsICJWZXNzZWxzIGluIERyYWtlIiwgIiUgb2YgdmVzc2VscyIsICJBbGwgZmlzaGluZyBlbmVyZ3kgaW4gRUVaIiwgIkZpc2hpbmcgZW5lcmd5IGluIERyYWtlIiwgIiUgZmlzaGluZyBlbmVyZ3kiKSkKYGBgCgoKYGBge3J9CmJpbm5lZF9kcmFrZV9lZmZvcnRfMjAxNl8xMl9ubSA8LSBhbGxfcG9zaXRpb25zX2luX2RyYWtlX2JleW9uZF8xMm5tICU+JSAKICBmaWx0ZXIobm5ldF9zY29yZSA9PSAxICYgeWVhciA9PSAyMDE2KSAlPiUgCiAgbXV0YXRlKGxhdF9iaW5fY2VudGVyID0gZmxvb3IobGF0KjgpLzgsCiAgICAgICAgIGxvbl9iaW5fY2VudGVyID0gZmxvb3IobG9uKjgpLzgpICU+JSAKICBncm91cF9ieShsb25fYmluX2NlbnRlciwgbGF0X2Jpbl9jZW50ZXIsIGZsYWdfY291bnRyeV9uYW1lLCBpbmZlcnJlZF9sYWJlbF9hbGx5ZWFycykgJT4lIAogIHN1bW1hcmlzZShmaXNoaW5nX2hvdXJzID0gc3VtKGhvdXJzKSwKICAgICAgICAgICAgZmlzaGluZ19lbmVyZ3kgPSBzdW0oaG91cnMqYl9lbmdpbmVfcG93ZXIpKQpgYGAKCgpgYGB7ciBmaWcuY2FwID0gIkZpZ3VyZSBmLiBEb21lc3RpYyBGaXNoaW5nIGVmZm9ydCBpbiB0aGUgY29uc2lkZXJlZCBEcmFrZSBwcm90ZWN0ZWQgYXJlYSBpbiAyMDE2In0KZHJha2VfZ29vZ2xlX21hcCA8LSBnZXRfZ29vZ2xlbWFwKGNlbnRlciA9IGMobG9uID0gLTY0LjUsIGxhdCA9IC01Ni42KSwgem9vbSA9IDcsIG1hcHR5cGUgPSAic2F0ZWxsaXRlIikKCihlZmZvcnRfbWFwX2luX0RyYWtlIDwtIGdnbWFwKGRyYWtlX2dvb2dsZV9tYXApKwogIGdlb21fcG9seWdvbigKICAgIGRhdGEgPSBicm9vbTo6dGlkeShkcmFrZV9lZXpfc3ApLAogICAgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKICAgIGZpbGwgPSAndHJhbnNwYXJlbnQnLAogICAgY29sb3IgPSAnZ29sZCcsCiAgICBhbHBoYSA9IDAKICAgICkrCiAgZ2VvbV90aWxlKGRhdGEgPSBiaW5uZWRfZHJha2VfZWZmb3J0XzIwMTZfMTJfbm0gJT4lIAogICAgICAgICAgICAgIGZpbHRlcihmbGFnX2NvdW50cnlfbmFtZSA9PSAiQXJnZW50aW5hIiAmIGZpc2hpbmdfaG91cnMgPiAuOSkgJT4lIAogICAgICAgICAgICAgIGdyb3VwX2J5KGxvbl9iaW5fY2VudGVyLCBsYXRfYmluX2NlbnRlciwgaW5mZXJyZWRfbGFiZWxfYWxseWVhcnMpLCAKICAgICAgICAgICAgYWVzKGxvbl9iaW5fY2VudGVyLCBsYXRfYmluX2NlbnRlciwgZmlsbCA9IGZpc2hpbmdfaG91cnMpLCAKICAgICAgICAgICAgaW50ZXJwb2xhdGUgPSBGLCAKICAgICAgICAgICAgc2hvdy5sZWdlbmQgPSBUKSArCiAgdmlyaWRpczo6c2NhbGVfZmlsbF92aXJpZGlzKG5hbWUgPSAiZmlzaGluZyBlbmVyZ3kgXG4gKEtXaCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFucyA9ICJsb2ciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gYygxLDEwLDUwLDEwMCwgMTAwMCwgMTAwMDAsIDEwMDAwMCwgODAwMDAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2NhbGVzOjpjb21tYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gMSkgKwogIGxhYnMoeCA9ICJMb25naXR1ZGUiLAogICAgICAgeSA9ICJMYXRpdHVkZSIpICsKICBndWlkZXMoZmlsbCA9IGd1aWRlX2NvbG91cmJhcih0aXRsZS5wb3NpdGlvbiA9ICJ0b3AiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUuaGp1c3QgPSAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLnRoZW1lID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMCwgc2l6ZSA9IDkpKSkrCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoLTY3LC02NiwtNjUsLTY0KSkrCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSkrCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAnZ3JleTgwJywgbGluZXR5cGUgPSAiZGFzaGVkIiksIAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwbG90Lm1hcmdpbiA9IHVuaXQoYygwLjcsIDAuNywgMC43LCAwLjcpLCAiY20iKSwKICAgICAgICBsZWdlbmQudGl0bGUgPSAgZWxlbWVudF90ZXh0KG1hcmdpbiA9IGMoMCwwLDUsMCwgImNtIiksIHNpemUgPSByZWwoLjkpKSwKICAgICAgICBsZWdlbmQua2V5LndpZHRoID0gIHVuaXQoLjUsICJjbSIpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSA5KSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOSkpKwogIGZhY2V0X3dyYXAoImluZmVycmVkX2xhYmVsX2FsbHllYXJzIikpCgp0aWZmKCJzYXZlZF9wbG90cy9lZmZvcnRfbWFwX2luX0RyYWtlLnRpZmYiLCBoZWlnaHQgPSAxMiwgd2lkdGggPSAyMCwgdW5pdHMgPSAnY20nLCBjb21wcmVzc2lvbiA9ICJsenciLCByZXMgPSAzMDApCiAgICAKcHJpbnQoZWZmb3J0X21hcF9pbl9EcmFrZSkKICAgIAppbnZpc2libGUoZGV2Lm9mZigpKQpgYGAKCgojIyBPdmVybGFwIGVmZm9yIG1hcCB3aXRoIGFsbCBNUEFzCgpgYGB7cn0KQU1QX3Y1IDwtIHN0X3JlYWQoIkFNUFNfc2hhcGVmaWxlcy9BTVBzXzVfdjEuc2hwIikKCkFNUF92NV9zcCA8LSBhcyhBTVBfdjUsICJTcGF0aWFsIikKYGBgCgoKYGBge3J9CihlZmZvcnRfbWFwX3dpdGhfYWxsX01QQXMgPC0gZ2dtYXAoYXJnX2Jhc2VtYXApKwogIGdlb21fcG9seWdvbigKICAgIGRhdGEgPSBicm9vbTo6dGlkeShhcmdfc2ltcGxlcl9lZXpfc3ApLAogICAgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKICAgIGZpbGwgPSAndHJhbnNwYXJlbnQnLAogICAgY29sb3IgPSAnYmxhY2snLAogICAgYWxwaGEgPSAwCiAgICApKwogICBnZW9tX3BvbHlnb24oCiAgICBkYXRhID0gYnJvb206OnRpZHkoZmFsa2xhbmRzX2Vlel9zcCksCiAgICBhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXApLAogICAgZmlsbCA9ICd0cmFuc3BhcmVudCcsCiAgICBjb2xvciA9ICdibGFjaycsCiAgICBhbHBoYSA9IDAKICAgICkrCiAgZ2VvbV90aWxlKGRhdGEgPSBiaW5uZWRfZWV6X2VmZm9ydF8yMDE2ICU+JQogICAgICAgICAgICAgIGdyb3VwX2J5KGxvbl9iaW5fY2VudGVyLCBsYXRfYmluX2NlbnRlcikgJT4lIAogICAgICAgICAgICAgIHN1bW1hcml6ZShmaXNoaW5nX2hvdXJzID0gc3VtKGZpc2hpbmdfa3doLCBuYS5ybSA9IFQpLzEwMDApICU+JSAKICAgICAgICAgICAgICBmaWx0ZXIoZmlzaGluZ19ob3VycyA+PSAuOSksCiAgICAgICAgICAgICAgYWVzKGxvbl9iaW5fY2VudGVyLCBsYXRfYmluX2NlbnRlciwgZmlsbCA9IGZpc2hpbmdfaG91cnMpLCAKICAgICAgICAgICAgICBpbnRlcnBvbGF0ZSA9IEYsIAogICAgICAgICAgICBzaG93LmxlZ2VuZCA9IFQpICsKICAgIGdlb21fcG9seWdvbigKICAgIGRhdGEgPSBicm9vbTo6dGlkeShBTVBfdjVfc3ApLAogICAgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKICAgIGZpbGwgPSAndHJhbnNwYXJlbnQnLAogICAgY29sb3IgPSAnYXF1YW1hcmluZScsCiAgICBhbHBoYSA9IDAKICAgICkrCiAgdmlyaWRpczo6c2NhbGVfZmlsbF92aXJpZGlzKG5hbWUgPSAiZmlzaGluZyBlbmVyZ3kgXG4gKHRob3VzYW5kIEtXaCkgXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFucyA9ICJsb2ciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gYygxLDEwLDEwMCwgMTAwMCwgMTAwMDAsIDEwMDAwMCwgODAwMDAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2NhbGVzOjpjb21tYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gMSkgKwogIGxhYnMoeCA9ICJMb25naXR1ZGUiLAogICAgICAgeSA9ICJMYXRpdHVkZSIpICsKICBndWlkZXMoZmlsbCA9IGd1aWRlX2NvbG91cmJhcih0aXRsZS5wb3NpdGlvbiA9ICJ0b3AiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUuaGp1c3QgPSAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLnRoZW1lID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMCwgc2l6ZSA9IDkpKSkrCiAgc2NhbGVfeF9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgYnJlYWtzID0gYygtNjUsLTYwLC01NSkpKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCkpKwogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gJ2dyZXk4MCcsIGxpbmV0eXBlID0gImRhc2hlZCIpLCAKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoMC43LCAwLjcsIDAuNywgMC43KSwgImNtIiksCiAgICAgICAgbGVnZW5kLnRpdGxlID0gIGVsZW1lbnRfdGV4dChtYXJnaW4gPSBjKDAsMCw1LDAsICJjbSIpLCBzaXplID0gcmVsKC43KSksCiAgICAgICAgbGVnZW5kLmtleS53aWR0aCA9ICB1bml0KC41LCAiY20iKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gOSksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpKSkKYGBgCgoKYGBge3J9CnRpZmYoInNhdmVkX3Bsb3RzL2VmZm9ydF9tYXBfd2l0aF9hbGxfTVBBcy50aWZmIiwgaGVpZ2h0ID0gMTIsIHdpZHRoID0gMjAsIHVuaXRzID0gJ2NtJywgY29tcHJlc3Npb24gPSAibHp3IiwgcmVzID0gMzAwKQogICAgCnByaW50KGVmZm9ydF9tYXBfd2l0aF9hbGxfTVBBcykKICAgIAppbnZpc2libGUoZGV2Lm9mZigpKQpgYGAKCg==